#include <iostream>
#include <vector>

template<size_t N>
class bit_set
{
public:
    bit_set()
    {
        _bits.resize(N/32 + 1, 0);
    }
    void set(size_t n) // 将位图的第n个比特位设置为1
    {
        int i = n / 32; // 这个数在第几个整型
        int j = n % 32; // 这个数在该整型的第几个比特位
        _bits[i] |= (1 << j);
    }
    void reset(size_t n) // 将位图的第n个比特位设置为0
    {
        int i = n / 32; // 这个数在第几个整型
        int j = n % 32; // 这个数在整型的第几个比特位
        _bits[i] &= ~(1 << j);
    }
    bool test(size_t n) // 判断位图对应位是否为1
    {
        int i = n / 32; // 这个数在第几个整型
        int j = n % 32; // 这个数在整型的第几个比特位
        return _bits[i] & (1 << j);
    }
private:
    std::vector<int> _bits;
};